/*
 * WidgetConfig.hpp
 *
 *  Created on: 2010-4-22
 *      Author: anod
 */

#ifndef WIDGETCONFIG_HPP_
#define WIDGETCONFIG_HPP_

#include <stdexcept>

#include <QString>
#include <EventDispatcher.hpp>

namespace AppConfig
{

#define SHAREDLIB_FUNCNAME_MAXLEN 256			//动态库函数名总长

// definition of WidgetConfig
class WidgetConfig:public EventDispatcher
{
public:
	/**
	 * Getter & Setter
	 * setter执行成功，发送事件：VALUE_DIRTY
	 */
	void            setInterval(unsigned long);
	unsigned long   getInterval() const;

	void            setURL(const QString&);
	const QString&  getURL() const;

	void            setScript(const QString&);
	const QString&  getScript() const;

	void            setPolicy(unsigned char) throw(std::invalid_argument);
	void            setPolicy(const char*) throw(std::invalid_argument);// "script" or "process" or "shared lib"
	unsigned char   getPolicy();

	void            setSharedLibFunc(const char*) throw(std::length_error);
	const char*     getSharedLibFunc() const;
public:
	/**
	 * 函数：save
	 * 功能：保存数据到xml配置文件中
	 * 参数：xml文件名
	 * 返回值：0表示成功，其它表示失败
	 * 发送事件：SAVE_FINISH, SAVE_FAILED
	 */
	int             save(const QString&);
	/**
	 * 函数：load
	 * 功能：从xml文件中载入数据到类成员中
	 * 参数：xml文件名
	 * 返回值：0表示成功，其它表示失败
	 * 发送事件：LOAD_FINISH, LOAD_FAILED
	 */
	int             load(const QString&);
public:
	WidgetConfig();
	WidgetConfig(const QString& file_name);
	WidgetConfig(unsigned long, const QString&, const QString&,
			     unsigned char, const char* ="");
public:
	/**
	 * 相关常量集
	 */
	static const unsigned char POLICY_TYPE_SCRIPT=0;
	static const unsigned char POLICY_TYPE_PROCESS=1;
	static const unsigned char POLICY_TYPE_SHAREDLIB=2;
private:
	unsigned long _grab_timegap;       //执行时间间隔
	QString       _data_url;           //网页url
	QString       _script_file;        //执行脚本名称
	unsigned char _paser_policy;       //html解析策略 0为脚本 1为进程 2为动态库
	char          _dll_funcname[SHAREDLIB_FUNCNAME_MAXLEN];  //动态库的函数名
};
// end of definition

}

#endif /* WIDGETCONFIG_HPP_ */
